package com.calvin.study.proxy.dynamicproxy.jdk;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * 
 * @ClassName:FangWuZhongJieProxy
 * @Description:房屋中介代理类
 * @author:Calvin.W
 * @date:2021年12月6日 上午11:44:27
 */
public class FangWuZhongJieProxy implements InvocationHandler {

	// 被代理的对象，把引用保存下来(持有被代理对象的引用)
	private Object target;

	public Object createJDKProxy(Object target) throws Exception {
		this.target = target;

		Class<?> clazz = target.getClass();
		// 创建JDK代理需要3个参数，目标类加载器、目标类接口、代理类对象(即本身)
		return Proxy.newProxyInstance(clazz.getClassLoader(), clazz.getInterfaces(), this);
	}

	// proxy代理类本身
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		before();
		Object obj = method.invoke(target, args);
		after();
		return obj;
	}

	private void before() {
		System.out.println("房租中介：按您需求找房源。");
	}

	private void after() {
		System.out.println("房屋中介：找到房源，收取中介费。");
	}

}
